home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / surfmodl.arc / UNDIGEST.PAS < prev   
Pascal/Delphi Source File  |  1987-05-01  |  3KB  |  82 lines

  1. { UNDIGEST.PAS: Undigestify data from the input stream, and send output to
  2.   named files. This program is used to break up the input stream (a "digest"
  3.   of files) into many smaller files, stripping off any leading and trailing
  4.   garbage, and preserve their original filenames. The beginning of each
  5.   new file in the input stream is assumed to be marked by a line that starts
  6.   with at least 6 dashes, and has the string "CUT HERE FOR flnm" somewhere
  7.   on the line. The name specified (flnm) is used to name the file. Undigest also
  8.   recognizes a special line of the same form (starting with at least 6 dashes),
  9.   but containing the string "END OF DIGEST" somewhere on the line. This should
  10.   be used to mark the end of the last file in the digest, to avoid any
  11.   trailing data from being included in the last file. If this line is left
  12.   off, a warning will be issued but the error is not fatal. One other note:
  13.   Any lines at the beginning of the digest, before the first file marker line,
  14.   are ignored. Invoke Undigest with a command of the form:
  15.     UNDIGEST < flnm
  16.   where flnm is the name of the file containing the full digest.
  17.  
  18.   Programmed by Ken Van Camp  <kvancamp@ARDEC.ARPA>, April, 1987.
  19. }
  20.  
  21. {$G16384,D-}          { Enable input redirection in Turbo Pascal }
  22. program UNDIGEST;
  23. var     Line:   string[127];    { a line of input }
  24.         Npos:   integer;        { position of a string in the line }
  25.         Filopen: boolean;       { is a file open now? }
  26.         Filout: text;           { the output file }
  27.         Filname: string[40];    { name of output file }
  28.  
  29. begin
  30.   Filopen := FALSE;
  31.   while (not eof) do begin
  32.     readln (Line);
  33.     Npos := pos ('------', Line);
  34.     if (Npos = 1) then begin
  35.       { found a line starting with dashes; begin new file or end of last }
  36.       { find the name of the next file }
  37.       Npos := pos ('CUT HERE FOR ', Line);
  38.       if (Npos > 0) then begin
  39.         { valid line; close the old file if it's open }
  40.         if (Filopen) then
  41.           close (Filout);
  42.         { get the filename }
  43.         Filname := copy (Line, Npos+13, 40);
  44.         { strip off any trailing blanks and dashes }
  45.         Npos := pos (' ', Filname);
  46.         if (Npos > 0) then
  47.           Filname := copy (Filname, 1, Npos-1);
  48.         { next line in case they forgot to skip a space before the dashes }
  49.         Npos := pos ('-', Filname);
  50.         if (Npos > 0) then
  51.           Filname := copy (Filname, 1, Npos-1);
  52.         writeln ('Opening file for output: ', Filname);
  53.         assign (Filout, Filname);
  54.         rewrite (Filout);
  55.         Filopen := TRUE;
  56.       end else begin
  57.         { check for end-of-digest marker }
  58.         Npos := pos ('END OF DIGEST', Line);
  59.         if (Npos > 0) then begin
  60.           writeln ('End marker found; normal termination');
  61.           if (Filopen) then
  62.             close (Filout);
  63.           halt;
  64.         end;
  65.         { Just a normal line; echo it if file's open }
  66.         if (Filopen) then
  67.           writeln (Filout, Line);
  68.       end; { if (Npos > 0) }
  69.     end else begin
  70.       { Just a normal line; echo it if file's open }
  71.       if (Filopen) then
  72.         writeln (Filout, Line);
  73.     end; { if (Npos = 1) }
  74.   end; { while }
  75.   if (Filopen) then begin
  76.     close (Filout);
  77.     writeln ('Warning: End of last file with no end marker read');
  78.   end else
  79.     writeln ('Error: No file separators found!');
  80. end. { program UNDIGEST }
  81.  
  82.